# 随机生成网络
import numpy as np
import matplotlib.pyplot as plt

# 根据节点个数在单位面积中随机生成网络
import generateMatrix


def generate_graph_by_node(node_number=100):
    rand_graph = np.random.rand(node_number, 2)
    return rand_graph


# 测试 在生成的随机网络中根据通信半径连接网络节点并保存图像
def connect_graph_by_radius(node_graph, matrix, radius_=0.0, node_num=0):
    # 画散点图，以x中的值为横坐标，以y中的值为纵坐标
    for i in range(0, len(node_graph)):
        for j in range(i, len(node_graph)):
            x1 = node_graph[i][0]
            x2 = node_graph[j][0]
            y1 = node_graph[i][1]
            y2 = node_graph[j][1]
            if radius_ * radius_ >= (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2):
                if matrix[i][j] != 0:
                    plt.plot([x1, x2], [y1, y2], color='k')
                    plt.scatter([x1, x2], [y1, y2], color='k', s=100, marker='s')

    plt.title('R = ' + str(radius_) + ' n = ' + str(node_num))
    # plt.scatter(x, y, c='r', s=80, alpha=1)
    plt.show()


if __name__ == '__main__':
    nodeNumber = 50
    radius = 0.4
    # 根据结点数量随机生成单位面积中的网络
    graph = generate_graph_by_node(nodeNumber)
    # 根据随机网络节点生成初始化的邻接矩阵
    init_array = generateMatrix.get_matrix_by_graph_and_radius(graph, radius)
    # 获取邻接矩阵幂运算结果
    adjacency_matrix, is_bool = generateMatrix.check_n_is_link(init_array, nodeNumber)
    # 根据邻接矩阵幂运算结果绘图
    connect_graph_by_radius(graph, adjacency_matrix, radius_=radius, node_num=nodeNumber)
